old_hash = {"rock" => "scissors", "scissors" => "paper"}
好處:key 在設值時可以是 String、Symbol、Integer….多種型別,以這題的輸入值是 String 就可以順利拿來跟 hash 一開始設值為 String 的 key 比較,可以達成龍哥寫的「win_table[p1] == p2」判斷
new_hash = {rock: "scissors", scissors: paper }
新式是直接用 symbol 作為 hash 的 key,甚至可以少寫箭頭做指定 value,但當一樣在判斷「win_table[p1] == p2」時,會發現「win_table[p1]」找到 nil。因為此時 hash 的 key 型別是 symbol(:rock),而非 String("rock"),所以這題並不適合用新式 hash 來寫。
# 實作猜拳程式
def rock_paper_scissor(p1, p2)
# 實作內容
end
puts rock_paper_scissor('rock', 'scissors') # 印出 Player 1 won!
puts rock_paper_scissor('paper', 'rock') # 印出 Player 1 won!
puts rock_paper_scissor('paper', 'scissors') # 印出 Player 2 won!
puts rock_paper_scissor('rock', 'paper') # 印出 Player 2 won!
puts rock_paper_scissor('rock', 'rock') # 印出 Draw!
puts rock_paper_scissor('scissors', 'scissors') # 印出 Draw!
def rock_paper_scissor(p1, p2)
if p1 == p2
"Draw!"
elsif (p1 == 'rock') && (p2 == 'scissors')
"Player 1 won!"
elsif (p1 == 'paper') && (p2 == 'rock')
"Player 1 won!"
elsif (p1 == 'paper') && (p2 == 'scissors')
"Player 2 won!"
elsif (p1 == 'rock') && (p2 == 'paper')
"Player 2 won!"
end
end
def rock_paper_scissor(p1, p2)
win_table = {'rock' => 'scissors', 'scissors' => 'paper', 'paper' => 'rock'}
if p1 == p2
"Draw!"
else
if win_table.has_key?(p1) && win_table[p1] == p2
"Player 1 won!"
else
"Player 2 won!"
end
end
end
(看到龍哥的答案真的太神,原來可以用 hash 搭配!)